// HasArea 计算面积 trait
trait HasArea {
    fn area(&self) -> f64;
}

#[allow(dead_code)]
struct Rectangle {
    x: f64,
    y: f64,
}

impl HasArea for Rectangle {
    fn area(&self) -> f64 {
        self.x * self.y
    }
}

fn main() {
    println!("泛型, 使用 trait 约束明确使用哪些功能");

    fn area<T: HasArea>(t: &T) -> f64 {
        t.area()
    }

    let rec = Rectangle { x: 0_f64, y: 0_f64 };
    println!("方形面积: {}", area(&rec));
}
